NLB 経由で手元の Windows 11 からプライベートサブネットの EC2(RHEL9)に TeraTerm での SSH 接続とファイル転送を試してみた
コーヒーが好きな emi です。
今回は NLB 経由で、手元の Windows 11 からプライベートサブネットの EC2(RHEL9)に TeraTerm での SSH 接続とファイル転送を試してみました。
はじめに
プライベートサブネットの EC2(RHEL9)にオンプレミスサーバーや手元の開発端末からファイルを共有したいケースがあります。
よく考えられるのは「踏み台サーバー経由でファイル共有する」「Transfer family で S3 バケットにデータを配置し、S3 バケット経由でファイル共有する」などのパターンです。
しかし、今回は「EC2 インスタンスを AWS Auto Scaling でスケーリングせず、1 台のみ」、「データを EC2 内部に保持している」、「ファイル共有したい周辺サーバーや開発端末が多く、SSM ポートフォワードや EC2 Instance Connect エンドポイントだと周辺サーバーや開発端末の設定が大変」等の前提があったため、NLB 経由で TeraTerm での SSH 接続とファイル転送を試してみました。
NLB を選定する際の注意点などは以下のブログにまとめていますので、参照ください。
Systems Manager セッションマネージャーを使いたい場合は以下のブログをご参照ください。
検証:TeraTerm での SSH 接続とファイル送受信
今回の検証構成図
以下のような構成で検証します。NLB のターゲットグループには EC2(RHEL9)が 1 台だけ含まれるようにします。
手元の Windows 11 端末には TeraTerm をインストールしておき、VPC と EC2 はあらかじめ作成しておいてください。
以降の手順は基本的に以下のブログと同様に設定します。
キーペアの部分のみ注意が必要ですので、後述します。
NLB のターゲットグループの作成
以下を参照のうえ実施ください。
NLB の作成
以下を参照のうえ実施ください。
EC2 インスタンスのセキュリティグループの編集
以下を参照のうえ実施ください。
ターゲットグループのヘルスステータス確認
以下を参照のうえ実施ください。
キーペアの作成
RHEL 9.0 では SHA-1 が非推奨になったことにより、キーペアのタイプが「RSA」だと鍵認証に失敗します。
本検証ではキーペアのタイプは「ED25519」を選択してください。
- 参考
EC2 のコンソール画面で [キーペア] - [キーペアを作成] をクリックします。
- 名前:任意の名前(今回は「sftp-test-tokyo4」としています)
- キーペアのタイプ:ED25519
- プライベートキーファイル形式:.pem
設定したら、「キーペアを作成」をクリックします。
秘密鍵(今回は「sftp-test-tokyo4.pem」)がダウンロードされます。このタイミングでしかキーペアはダウンロードできないので、大事に保管してください。
キーペアの公開鍵の文字列を取得
キーペアの公開鍵を取得します。
PuTTy などの 3rd Party 製品を使う方法もありますが、AWS CLI で公開鍵を表示できるので、CloudShell で公開鍵の文字列を取得しましょう。
以下のドキュメントで、AWS CLI を利用して公開鍵の文字列を取得するコマンドを確認します。
公開鍵の文字列を取得するコマンド構文
aws ec2 describe-key-pairs --key-names key-pair-name --include-public-key
key-pair-name
にはキーペアの名前をいれます。今回キーペアの名前は「sftp-test-tokyo4」としましたので、実行コマンドは以下になります。
aws ec2 describe-key-pairs --key-names sftp-test-tokyo4 --include-public-key
CloudShell を開き、コマンドを実行します。
- 実行結果
[cloudshell-user@ip-10-6-34-245 ~]$ aws ec2 describe-key-pairs --key-names sftp-test-tokyo4 --include-public-key { "KeyPairs": [ { "KeyPairId": "key-0789c1188293c8c61", "KeyFingerprint": "xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx", "KeyName": "sftp-test-tokyo4", "KeyType": "ed25519", "Tags": [], "PublicKey": "ssh-ed25519 AAAAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxlh39 sftp-test-tokyo4", "CreateTime": "2023-11-02T18:33:50.546000+00:00" } ] } [cloudshell-user@ip-10-6-34-245 ~]$
"PublicKey"
の後ろが公開鍵の文字列です。ssh-ed25519 AAAAxxx~xxxlh39 sftp-test-tokyo4
の部分をコピーしておいてください。
セッションマネージャーで EC2(RHEL9)に接続し、公開鍵の文字列を登録
セッションマネージャーで EC2(RHEL9)に接続し、公開鍵の文字列を登録します。
セッションマネージャーで EC2(RHEL9)に接続してください。
ec2-user に切り替えます。
実行コマンド
sudo su - ec2-user
- 実行結果例
sh-5.1$ sudo su - ec2-user Last login: Sun Nov 5 07:45:27 UTC 2023 from 104.28.238.35 on pts/0 [ec2-user@ip-10-1-10-94 ~]$
ls -la
コマンドで、ec2-user のホームディレクトリに .ssh
があるか確認します。
- 実行結果例
[ec2-user@ip-10-1-10-94 ~]$ ls -la total 28 drwx------. 3 ec2-user ec2-user 4096 Nov 2 19:04 . drwxr-xr-x. 4 root root 38 Oct 31 02:21 .. -rw-r--r--. 1 ec2-user ec2-user 0 Nov 2 15:57 20231103_test.txt -rw-------. 1 ec2-user ec2-user 875 Nov 2 18:45 .bash_history -rw-r--r--. 1 ec2-user ec2-user 18 Nov 24 2022 .bash_logout -rw-r--r--. 1 ec2-user ec2-user 141 Nov 24 2022 .bash_profile -rw-r--r--. 1 ec2-user ec2-user 492 Nov 24 2022 .bashrc -rw-------. 1 ec2-user ec2-user 20 Nov 2 18:49 .lesshst drwx------. 2 ec2-user ec2-user 76 Nov 2 18:57 .ssh -rw-r--r--. 1 ec2-user ec2-user 30 Oct 31 02:42 test_EC2_file.txt -rw-r--r--. 1 ec2-user ec2-user 0 Aug 12 13:32 test.txt [ec2-user@ip-10-1-10-94 ~]$
.ssh
がありました。
続いて ls -la .ssh/
コマンドで、authorized_keys
ファイルがあるか確認します。
- 実行結果例
[ec2-user@ip-10-1-10-94 ~]$ ls -la .ssh/ total 24 drwx------. 2 ec2-user ec2-user 76 Nov 2 18:57 . drwx------. 3 ec2-user ec2-user 4096 Nov 5 07:15 .. -rw-------. 1 ec2-user ec2-user 496 Nov 2 18:54 authorized_keys -rw-------. 1 ec2-user ec2-user 12288 Nov 2 17:49 .authorized_keys.swp -rw-r--r--. 1 ec2-user ec2-user 127 Nov 2 18:57 known_hosts [ec2-user@ip-10-1-10-94 ~]$
authorized_keys
ファイルがありました。
vi .ssh/authorized_keys
で編集します。
- 実行結果
[ec2-user@ip-10-1-10-94 ~]$ vi .ssh/authorized_keys
vi
コマンドを実行すると vi エディタが開きます。i
キーを押下して編集モードに遷移します。
先ほどコピーしておいた公開鍵の文字列を貼り付けます。
既に登録済みの別の公開鍵の文字列が存在しますが、改行して、上記画像のように続けて貼り付けて OK です。
esc
キーを押下して編集モードを抜けたら、:wq
を入力し Enter
キーを押下して保存します。
authorized_keys
ファイルの中身が正しく編集できたか cat
コマンドで確認します。
実行コマンド
cat .ssh/authorized_keys
- 実行結果
[ec2-user@ip-10-1-10-94 ~]$ cat .ssh/authorized_keys ssh-rsa AAAAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxSZV7 sftp-test-tokyo ssh-ed25519 AAAAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxlh39 sftp-test-tokyo4 [ec2-user@ip-10-1-10-94 ~]$
authorized_keys
ファイルに公開鍵の文字列が保存できたことが確認できました。
これで EC2 インスタンスにキーペアの公開鍵の文字列を登録できました。
もし authorized_keys
ファイルの編集権限がない場合は chmod 600 .ssh/authorized_keys
などで書き込み権限を付与してください。
TeraTerm による SSH 接続
TeraTerm を開きます。
- ホスト:コピーしておいた NLB の DNS 名、または NLB に付与した Elastic IP アドレス
- TCP ポート:22
- サービス:SSH
入力できたら「OK」をクリックします。
- ユーザー名:ec2-user(キーペアを登録したユーザー)
- 「RSA/DSA/ECDSA/ED25519鍵を使う」にチェック
- 秘密鍵:キーペアを保存している手元の Windows 11 端末のパスを入力
入力できたら「OK」をクリックします。
EC2 インスタンスに NLB 経由で SSH 接続できました。
TTHHS: Secure File Copy によるファイル送受信
[ファイル] - [SSH SCP] をクリックします。
「TTSSH: Secure File Copy」画面が開きます。
まずは手元の Windows 11 端末から EC2(RHEL9)のファイルを送ります。
上部の From に送りたいファイルのパスを入力し、「send」をクリックします。
EC2 上 ec2-user のホームディレクトリで ls -la
コマンドでを実行しファイルを確認すると、send したファイルが存在することが分かります。
[ec2-user@ip-10-1-10-94 ~]$ ls -la total 28 drwx------. 3 ec2-user ec2-user 4096 Nov 2 19:04 . drwxr-xr-x. 4 root root 38 Oct 31 02:21 .. -rw-r--r--. 1 ec2-user ec2-user 0 Nov 2 15:57 20231103_02_test.txt -rw-r--r--. 1 ec2-user ec2-user 0 Nov 2 15:57 20231103_test.txt -rw-------. 1 ec2-user ec2-user 875 Nov 2 18:45 .bash_history -rw-r--r--. 1 ec2-user ec2-user 18 Nov 24 2022 .bash_logout -rw-r--r--. 1 ec2-user ec2-user 141 Nov 24 2022 .bash_profile -rw-r--r--. 1 ec2-user ec2-user 492 Nov 24 2022 .bashrc -rw-------. 1 ec2-user ec2-user 20 Nov 2 18:49 .lesshst drwx------. 2 ec2-user ec2-user 76 Nov 2 18:57 .ssh -rw-r--r--. 1 ec2-user ec2-user 30 Oct 31 02:42 test_EC2_file.txt -rw-r--r--. 1 ec2-user ec2-user 0 Aug 12 13:32 test.txt [ec2-user@ip-10-1-10-94 ~]$
次は EC2 上のファイルを手元の端末にコピーします。
EC2 上でテストファイルを作成します。
touch 20231103_02_test_EC2_file.txt
ファイルが作成できたか確認します。
ls -la | grep 20231103_02_test_EC2_file.txt
- 実行結果例
[ec2-user@ip-10-1-10-94 ~]$ touch 20231103_02_test_EC2_file.txt [ec2-user@ip-10-1-10-94 ~]$ ls -la | grep 20231103_02_test_EC2_file.txt -rw-r--r--. 1 ec2-user ec2-user 0 Nov 2 19:05 20231103_02_test_EC2_file.txt [ec2-user@ip-10-1-10-94 ~]$
では手元の端末にコピーします。
以下の画像のように、下部の From に送りたいファイルパスを入力します。
To にはファイルをコピーしたい手元の端末のパスを入力し、「Receive」をクリックします。
手元の端末にファイルがコピーされました。
終わりに
今回は「EC2 インスタンスを AWS Auto Scaling でスケーリングせず、1 台のみ」、「データを EC2 内部に保持している」等の前提があったため NLB 経由での SCP ファイル送受信を試してみました。 どなたかの参考になれば幸いです。